package com.ymx.darling.executor;

import com.ymx.darling.bean.sql.Statement;
import com.ymx.darling.cursor.Cursor;
import com.ymx.darling.transaction.Close;

import java.sql.Connection;
import java.util.List;

/**
 * sql执行器
 * 负责执行sql处理结果集和缓存等工作
 *
 * @author 爱java的小于
 * @time 2022-7-26
 */
public interface Executor extends Close {
    /**
     * 判断是否关闭连接
     * @return true 关闭 false 没有被关闭
     */
    boolean isClose();
    /**
     * 提交事务
     */
    void commit();

    /**
     * 事务回滚
     */
    void rollBack();

    /**
     * 返回数据库连接
     * @return Connection
     */
    Connection getConnection();

    /**
     * 执行更新数据库数据
     *
     * @param statement Statement
     * @return 影响大记录数
     */
    int update(Statement statement);

    /**
     * 查询数据集
     * @param statement Statement
     * @return List 封装后的所有POJO类型实例全部放入到List中
     */
    <T> List<T> queryList(Statement statement);

    /**
     * 查询一个游标接口
     * @param statement statement
     * @param <T> T
     * @return cursor
     */
    <T> Cursor<T> queryCursor(Statement statement);
}